package world.zwq.gulimall.product;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

/**
 * 1、整合mybatis-plus
 *      1）、导入依赖
 *      2）、开始配置
 *          1、配置数据源：
 *              1）、导入数据库驱动。
 *              2）、在application.yml配置数据源相关信息
 *          2、配置MyBatis-Plus：
 *              1）、使用@MapperScan
 *              2)、告诉mybatis-plus,sql映射文件位置
 *
 *  2、使用逻辑删除
 *      1)、配置逻辑删除规则
 *  3、数据校验
 *      1）给实体标注校验注解,并定义message提示
 *      2）提交数据时，告诉mvc数据需要校验，@Valid
 *      //效果有默认的响应
 *      3）给校验的bean后面加一个参数，BindingResult
 *      4）分组校验
 *          1)@NotBlank(message = "商标不能为空",groups = {AddGroup.class,UpdateGroup.class})
 *          给校验注解标注什么情况需要进行校验
 *          2)@Validated(AddGroup.class)
 *          3)默认不指定分组的注解，在分组情况下不生效,只会在不分组情况下生效
 *      5) 自定义校验
 *          1) 编写自定义校验注解
 *          2) 编写一个自定义校验器 ConstraintValidator
 *          @Documented
 *          @Constraint(validatedBy = {ListValueConstraintValidator.class})【可以指定多个校验器】
 *          @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
 *          @Retention(RUNTIME)
 *          3) 关联自定义的校验器和校验注解
 *
 *  4、统一异常处理
 *  @ControllerAdvice
 *
 *
 *  5、整合redisson作为分布式锁的功能框架
 *  1）引入依赖
 * <dependency>
 *     <groupId>org.redisson</groupId>
 *     <artifactId>redisson</artifactId>
 *     <version>3.16.1</version>
 * </dependency>
 *    2）配置
 *
 *
 */
@EnableCaching
@EnableFeignClients(basePackages = {"world.zwq.gulimall.product.feign"})
@EnableDiscoveryClient
@SpringBootApplication
@MapperScan("world.zwq.gulimall.product.dao")
public class GulimallProductApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallProductApplication.class, args);
    }

}
